Проба QR.
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                        ОТДЕЛ ПроQR+;
(******************************************************************************
 * НАЗНАЧЕНИЕ: 
 *   решение систем линейных уравнений (A*x=b) методом QR-разложения
 *
 * ПРИМЕЧАНИЯ: 
 *     Система уравнений записана в файле "ПроМатр2.дан".
 *     В этом файле 1-я строка содержит размер матрицы A
 *   (число строк и столбцов), в следующих строках записанны значения элементов
 *   матрицы A, потом на отдельной строке размер матрицы свободных членов B
 *   (число векторов b и их размер), а далее значения элементов матрицы B, 
 *   в которой строки являются векторами b.
 *
 *     Прямоугольная матрица A (N на M, с N >= M) раскладывается на два
 *   сомножителя (A=Q*R), где Q (N на M) ортогональная матрица, а
 *   R (M на M) - верхняя треугольная матрица. Получаем Q*R*x = b, далее
 *   R*x = Q'b. Последняя система решается методом обратной подстановки.
 *     Если система несовместна (N > M), то метод возвращает такой вектор x,
 *   для которого A*x является наилучшим приближением к b (по норме). 
 ******************************************************************************)
ИСПОЛЬЗУЕТ
  Матр   ИЗ "...\Отделы\Числа\",
  МатрВВ ИЗ "...\Отделы\Числа\",
  Читать ИЗ "...\Отделы\Обмен\",
  Вывод  ИЗ "...\Отделы\Обмен\";

(******************************************************************************)
ЗАДАЧА Голова;
ПОСТ
  TOL=1.D-8;   (* собственные значения обнуляются, если они более чем
                  * в TOL раз меньше наибольшего собственного значения  *)
ПЕР
  n:ЦЕЛ;  (* размер вектора свободных членов *)
  nv:ЦЕЛ; (* число векторов свободных членов *)
  A:Матр.Доступ; (* матрица системы *)
  R:Матр.Доступ; (* верхняя треугольная матрица *)
  B:Матр.Доступ; (* вектора свободных членов *)
  X:Матр.Доступ; (* вектора решения *)
  i:ЦЕЛ; 
  п:Читать.Поток;
УКАЗ
  п:=МатрВВ.ОткрытьПоток("ПроМатр2.дан");
  A:=МатрВВ.ЧитатьМатр(п);
  B:=МатрВВ.ЧитатьМатр(п);
  Читать.Закрыть(п);
  nv:=РАЗМЕР(B^,0);
  n:=РАЗМЕР(B^,1);
  СОЗДАТЬ(R,n,n);
  СОЗДАТЬ(X,nv,n);
  Вывод.Цепь("^Исходная матрица:^");
  МатрВВ.ВыводМатр("%10.5f",A^);
  Вывод.Цепь("^Вектора свободных членов:^");
  ОТ i:=0 ДО nv-1 ВЫП
    МатрВВ.ВыводВект("%10.5f",B[i])
  КОН;
  (* После выполнения РазложитьНаQR матрица Q оказывается на месте матрицы A *)
  ЕСЛИ Матр.РазложитьНаQR(A^,R^) = 0 ТО
    (* решаем систему для каждого вектора свободных членов b *)
    Вывод.Цепь("^Вектора решения:^");
    ОТ i:=0 ДО nv-1 ВЫП
      Матр.РешитьИзQR(A^,R^,B[i],X[i]); 
      МатрВВ.ВыводВект("%10.5f",X[i])
    КОН
  ИНАЧЕ
    Вывод.Цепь("^Вырожденная матрица!^")
  КОН
КОН Голова;

(******************************************************************************)
УКАЗ
  Голова
КОН ПроQR.




Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы